﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using DTO;
using BUS;
using DAO;
using CrystalDecisions.CrystalReports.Engine;

namespace GUI
{
    public partial class FormQLGoiMon : Form
    {
        public FormQLGoiMon()
        {
            InitializeComponent();
        }
        public NHANVIENDTO NVDTO;
        List<TANGDTO> dst;
        List<BANDTO> dsb;
        List<NHANVIENDTO> dsg;
        List<LOAIMONDTO> dsl;
        List<THUCDONDTO> dsm;
        public string Tang;
        bool lvk, lvl, loai=false; 
        public bool tt=false;
        //Hàm
        public void CapNhat(string Tang, string Ban)
        {
            txtSoKhach.Text = "";
            //Lấy danh sách tầng
            LayDanhSachTang();
            //Lấy danh sách bàn
            LayDanhSachBan();
            cboDSTang.SelectedItem = Tang;
            cboDSBanTrong.SelectedItem = Ban;
        }
        public void CapNhat2(string Loai, string Mon, string DVT, bool cMon)
        {
            rdMon.Checked = cMon;
            if (cMon)
            {
                rdNuoc.Checked = false;
            }
            else
            {
                rdNuoc.Checked = true;
            }
            //Lấy danh loại món
            LayDanhSachLoaiMon();
            //Lấy danh sách món
            LayDanhSachMon();
            cboLoaiMon.SelectedItem = Loai;
            for (int i = 0; i < dsm.Count; i++ )
            {
                if(dsm[i].TenMon==Mon && dsm[i].DVT==DVT)
                {
                    cboMon.SelectedIndex = i;
                }
            }
        }
        public void LayDanhSachNhanVienGoiMon()
        {
            int i;
            cboNVGoiMon.Items.Clear();
            dsg = new List<NHANVIENDTO>();
            NHANVIENBUS NVBUS = new NHANVIENBUS();
            dsg = NVBUS.LayDSNVGoiMon();
            for (i = 0; i < dsg.Count; i++)
            {
                cboNVGoiMon.Items.Add(dsg[i].MaNV);
            }
            if (i > 0) cboNVGoiMon.SelectedIndex = 0;
        }
        public void LayDanhSachTang()
        {
            int i;
            cboDSTang.Items.Clear();
            cboDSTang.Text = "";
            dtgDanhSachBan.Rows.Clear();
            dst = new List<TANGDTO>();
            TANGBUS TBUS = new TANGBUS();
            dst = TBUS.LayDSTang();
            for (i = 0; i < dst.Count; i++)
            {
                cboDSTang.Items.Add(dst[i].TenTang);
            }
            if (cboDSTang.Items.Count > 0) cboDSTang.SelectedIndex = 0;
            else
            {
                btnDatBan.Text = "Đặt bàn";
                cboDSBanTrong.Items.Clear();
                cboDSBanTrong.Text = "";
            };
        }
        public void LayDanhSachTang2()
        {
            int i;
            //Lấy danh sách tâng có bàn trống vừa số khách/các tầng còn lại
            cboDSTang.Items.Clear();
            cboDSTang.Text = "";
            dtgDanhSachBan.Rows.Clear();
            dst = new List<TANGDTO>();
            TANGBUS TBUS = new TANGBUS();
            dst = TBUS.LayDSTang2(Convert.ToInt32(txtSoKhach.Text));
            for (i = 0; i < dst.Count; i++)
            {
                cboDSTang.Items.Add(dst[i].TenTang);
            }
            if (cboDSTang.Items.Count > 0) cboDSTang.SelectedIndex = 0;
            else
            {
                btnDatBan.Text = "Đặt bàn";
                cboDSBanTrong.Items.Clear();
                cboDSBanTrong.Text = "";
            };
        }
        public void LayDanhSachBan()
        {
            int i;
            cboDSBanTrong.Items.Clear();
            cboDSBanTrong.Text = "";
            dsb = new List<BANDTO>();
            BANBUS BBUS = new BANBUS();
            if (cboDSTang.SelectedIndex == -1)
            {
                btnDatBan.Text = "Đặt bàn";
                return;
            }
            dsb = BBUS.LayDSBan(dst[cboDSTang.SelectedIndex]);
            dtgDanhSachBan.Rows.Clear();
            DataGridViewCellStyle style = new DataGridViewCellStyle();
            style.Font = new Font(dtgDanhSachBan.Font, FontStyle.Bold);
            for (i = 0; i < dsb.Count; i++)
            {
                cboDSBanTrong.Items.Add(dsb[i].TenBan);
                dtgDanhSachBan.Rows.Add(dsb[i].TenBan, dsb[i].SucChua, dsb[i].SoKhach);
                if (dsb[i].SoKhach != 0)
                {
                    dtgDanhSachBan.Rows[i].DefaultCellStyle = style;
                }
            }
            if (cboDSBanTrong.Items.Count > 0) cboDSBanTrong.SelectedIndex = 0;
        }
        public void LayDanhSachBan2()
        {
            int i;
            //Lấy danh sách bàn trong tầng trên
            cboDSBanTrong.Items.Clear();
            cboDSBanTrong.Text = "";
            dsb = new List<BANDTO>();
            BANBUS BBUS = new BANBUS();
            if (cboDSTang.SelectedIndex == -1)
            {
                btnDatBan.Text = "Đặt bàn";
                return;
            }
            dtgDanhSachBan.Rows.Clear();
            dsb = BBUS.LayDSBan2(dst[cboDSTang.SelectedIndex], Convert.ToInt32(txtSoKhach.Text));
            DataGridViewCellStyle style = new DataGridViewCellStyle();
            style.Font = new Font(dtgDanhSachBan.Font, FontStyle.Bold);
            for (i = 0; i < dsb.Count; i++)
            {
                cboDSBanTrong.Items.Add(dsb[i].TenBan);
                dtgDanhSachBan.Rows.Add(dsb[i].TenBan, dsb[i].SucChua, dsb[i].SoKhach);
                if (dsb[i].SoKhach != 0)
                {
                    dtgDanhSachBan.Rows[i].DefaultCellStyle = style;
                }
            }
            if (cboDSBanTrong.Items.Count > 0) cboDSBanTrong.SelectedIndex = 0;
        }
        public void LayDanhSachLoaiMon()
        {
            int i;
            if (cboDSBanTrong.SelectedIndex == -1) return;
            cboLoaiMon.Items.Clear();
            cboLoaiMon.Text = "";
            dtgDSMonGoi.Rows.Clear();
            dsl = new List<LOAIMONDTO>();
            LOAIMONBUS LBUS = new LOAIMONBUS();
            dsl = LBUS.LayDSLoai(dsb[cboDSBanTrong.SelectedIndex], loai);
            for (i = 0; i < dsl.Count; i++)
            {
                cboLoaiMon.Items.Add(dsl[i].TenLoai);
            }
            if (cboLoaiMon.Items.Count > 0) cboLoaiMon.SelectedIndex = 0;
            else
            {
                cboMon.Items.Clear();
                cboMon.Text = "";
            };
        }
        public void LayDanhSachMon()
        {
            int i;
            if (cboLoaiMon.SelectedIndex == -1) return;
            cboMon.Items.Clear();
            cboMon.Text = "";
            dtgDSMonGoi.Rows.Clear();
            dsm = new List<THUCDONDTO>();
            THUCDONBUS MBUS = new THUCDONBUS();
            dsm = MBUS.LayDSMon(dsl[cboLoaiMon.SelectedIndex], dsb[cboDSBanTrong.SelectedIndex]);
            DataGridViewCellStyle style1 = new DataGridViewCellStyle();
            style1.Font = new Font(dtgDanhSachBan.Font, FontStyle.Bold);
            for (i = 0; i < dsm.Count; i++)
            {
                cboMon.Items.Add(dsm[i].TenMon);
                dtgDSMonGoi.Rows.Add(dsm[i].TenMon, dsm[i].SL, dsm[i].KM, dsm[i].DVT);
                if (dsm[i].SL != 0 || dsm[i].KM != 0)
                {
                    dtgDSMonGoi.Rows[i].DefaultCellStyle = style1;
                }
            }
            if (cboMon.Items.Count > 0) cboMon.SelectedIndex = 0;
            else
            {
                txtDVT.Text = "";
            };
        }
        public void LayDVT()
        {
            THUCDONBUS MBUS = new THUCDONBUS();
            txtDVT.Text = MBUS.LayDVT(dsm[cboMon.SelectedIndex]);
        }
        //SỰ KIỆN
        private void FormQLGoiMon_Load(object sender, EventArgs e)
        {
            dtThoiGian.Format = DateTimePickerFormat.Long;
            this.Text += " - NV: " + NVDTO.MaNV + " " + NVDTO.TenNV;
            //Lấy danh sách nhân viên gọi món
            LayDanhSachNhanVienGoiMon();
            //Lấy danh sách tầng
            LayDanhSachTang();
            //Lấy danh sách bàn
            LayDanhSachBan();
        }
        //Sự kiện Đặt bàn
        private void cboDSTang_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (txtSoKhach.Text == "")
            {
                LayDanhSachBan();
            }
            else
            {
                bool check = true;
                string s = txtSoKhach.Text;
                int i;
                for (i = 0; i < s.Length; i++)
                {
                    if (char.IsDigit(s[i]) == false)
                    {
                        check = false;
                        break;
                    };
                }
                if (check)
                {
                    int x = Convert.ToInt32(txtSoKhach.Text);
                    if (x < 1) check = false;
                }
                if (check)
                {
                    LayDanhSachBan2();
                }
                else
                {
                    LayDanhSachBan();
                }
            }
        }
        public void txtSoKhach_TextChanged(object sender, EventArgs e)
        {
            if (lvk)
            {
                lvk = false;
                txtSoKhach.BackColor = Color.White;
            }
            string s = txtSoKhach.Text;
            if (s == "")
            {
                LayDanhSachTang();
                return;
            }
            bool check = true;
            int i;
            for (i = 0; i < s.Length; i++)
            {
                if (char.IsDigit(s[i]) == false)
                {
                    check = false;
                    break;
                };
            }
            if (check == false || Convert.ToInt32(txtSoKhach.Text) <= 0)
            {
                lvk = true;
                txtSoKhach.Focus();
                txtSoKhach.SelectionStart = 0;
                txtSoKhach.SelectionLength = txtSoKhach.TextLength;
                txtSoKhach.BackColor = Color.Pink;
                return;
            }
            LayDanhSachTang2();
        }
        private void cboDSTang_DrawItem(object sender, DrawItemEventArgs e)
        {
            e.DrawBackground();
            if (e.Index == -1) return;
            if (dst[e.Index].TinhTrang == 0)//Có khách còn bàn
            {
                e.Graphics.DrawString(cboDSTang.Items[e.Index].ToString(), cboDSTang.Font, System.Drawing.Brushes.Blue, new RectangleF(e.Bounds.X, e.Bounds.Y, e.Bounds.Width, e.Bounds.Height));
            }
            else if (dst[e.Index].TinhTrang == 1)//Hết bàn
            {
                e.Graphics.DrawString(cboDSTang.Items[e.Index].ToString(), cboDSTang.Font, System.Drawing.Brushes.Red, new RectangleF(e.Bounds.X, e.Bounds.Y, e.Bounds.Width, e.Bounds.Height));
            }
            else if (dst[e.Index].TinhTrang == -1)
                e.Graphics.DrawString(cboDSTang.Items[e.Index].ToString(), cboDSTang.Font, System.Drawing.Brushes.Blue, new RectangleF(e.Bounds.X, e.Bounds.Y, e.Bounds.Width, e.Bounds.Height));
            e.DrawFocusRectangle();
        }
        private void cboDSBanTrong_DrawItem(object sender, DrawItemEventArgs e)
        {
            e.DrawBackground();
            if (e.Index == -1) return;
            if (dsb[e.Index].SoKhach != 0)
            {
                e.Graphics.DrawString(cboDSBanTrong.Items[e.Index].ToString(), cboDSBanTrong.Font, System.Drawing.Brushes.Red, new RectangleF(e.Bounds.X, e.Bounds.Y, e.Bounds.Width, e.Bounds.Height));
            }
            else
                e.Graphics.DrawString(cboDSBanTrong.Items[e.Index].ToString(), cboDSBanTrong.Font, System.Drawing.Brushes.Blue, new RectangleF(e.Bounds.X, e.Bounds.Y, e.Bounds.Width, e.Bounds.Height));
            e.DrawFocusRectangle();
        }
        private void dtgDanhSachBan_SelectionChanged(object sender, EventArgs e)
        {
            txtBan.Text = "";
            txtTang.Text = "";
            int sr = dtgDanhSachBan.CurrentCell.RowIndex;
            if (sr != -1 && dsb.Count > sr && dsb[sr].SoKhach != 0)
            {
                txtBan.Text = dsb[sr].TenBan;
                txtTang.Text = cboDSTang.Text;
                btnDatBan.Text = "Hủy bàn";
                btnCapNhat.Enabled = true;
                btnThanhToan.Enabled = true;
            }
            else
            {
                btnCapNhat.Enabled = false;
                btnThanhToan.Enabled = false;
                btnDatBan.Text = "Đặt bàn";
            }
        }
        private void dtgDanhSachBan_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            if (e.RowIndex < 0)
                return;
            cboDSBanTrong.SelectedIndex = dtgDanhSachBan.CurrentCell.RowIndex;
        }
        private void cboDSBanTrong_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (lvk)
            {
                lvk = false;
                txtSoKhach.BackColor = Color.White;
            }
            dtgDanhSachBan.CurrentCell = dtgDanhSachBan[0, cboDSBanTrong.SelectedIndex];
            dtgDanhSachBan_SelectionChanged(sender, e);
        }
        private void btnDatBan_Click(object sender, EventArgs e)
        {
            if (btnDatBan.Text == "Đặt bàn")
            {
                if (cboDSBanTrong.SelectedIndex == -1)
                {
                    MessageBox.Show("Vui lòng chọn bàn phù hợp.", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    return;
                }
                bool check = true;
                string s = txtSoKhach.Text;
                if (s == "")
                {
                    txtSoKhach.BackColor = Color.Pink;
                    txtSoKhach.Focus();
                    lvk = true;
                    return;
                }
                int i;
                for (i = 0; i < s.Length; i++)
                {
                    if (char.IsDigit(s[i]) == false)
                    {
                        check = false;
                        break;
                    };
                }
                if (check)
                {
                    int x = Convert.ToInt32(txtSoKhach.Text);
                    if (x < 1) check = false;
                }
                if (check == false)
                {
                    MessageBox.Show("Số khách không đúng.", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    txtSoKhach.Focus();
                    txtSoKhach.SelectionStart = 0;
                    txtSoKhach.SelectionLength = txtSoKhach.TextLength;
                    txtSoKhach.BackColor = Color.Pink;
                    return;
                }
                HOADONDTO HDTO = new HOADONDTO();
                HDTO.MaBan = dsb[cboDSBanTrong.SelectedIndex].MaBan;
                HDTO.MaNV = NVDTO.MaNV;
                HDTO.ThoiGian = dtThoiGian.Value;
                HDTO.SoKhach = Convert.ToInt32(txtSoKhach.Text);
                HOADONBUS HBUS = new HOADONBUS();
                if (HBUS.DatBan(HDTO) < 1)
                {
                    MessageBox.Show("Đặt bàn không thành công.", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }
            }
            else
            {
                //Trường hợp khách gọi món rồi nhưng vẫn cho phép hủy
                //Khách gọi nhưng không đợi được
                HOADONBUS HBUS = new HOADONBUS();
                HOADONDTO HDTO = new HOADONDTO();
                HDTO = HBUS.LayThongTinHD(dsb[cboDSBanTrong.SelectedIndex]);
                if (HBUS.KiemTraHuy(dsb[cboDSBanTrong.SelectedIndex]))//Chưa gọi món
                {
                    if (MessageBox.Show("Bạn thực sự muốn hủy bàn này?", "Thông báo", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK)
                    {
                        //Hủy bàn
                        if (HBUS.HuyBan(HDTO) < 1)
                        {
                            MessageBox.Show("Hủy thất bại.", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        }
                    }
                }
                else//Đã gọi món
                {
                    if (MessageBox.Show("Bàn này đã gọi món.\nBạn có thực sự muốn hủy?", "Thông báo", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK)
                    {
                        //Hủy bàn
                        if (HBUS.HuyBan(HDTO) < 1)
                        {
                            MessageBox.Show("Hủy thất bại.", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        }
                    }
                }
            }
            string tang = dst[cboDSTang.SelectedIndex].TenTang, ban = dsb[cboDSBanTrong.SelectedIndex].TenBan;
            txtSoKhach.Text = "";
            LayDanhSachTang();
            cboDSTang.SelectedItem = tang;
            LayDanhSachBan();
            cboDSBanTrong.SelectedItem = ban;
            txtSoKhach.Focus();
            txtSoKhach.SelectionStart = 0;
            txtSoKhach.SelectionLength = txtSoKhach.TextLength;
        }
        private void btnCapNhat_Click(object sender, EventArgs e)
        {
            HOADONBUS HBUS = new HOADONBUS();
            HOADONDTO HDTO = new HOADONDTO();
            HDTO = HBUS.LayThongTinHD(dsb[cboDSBanTrong.SelectedIndex]);
            FormCapNhatBanDat frm = new FormCapNhatBanDat();
            frm.CapNhat = new FormCapNhatBanDat.GetString(CapNhat);
            frm.NVDTO = NVDTO;
            frm.Tang = dst[cboDSTang.SelectedIndex].TenTang;
            frm.Ban = dsb[cboDSBanTrong.SelectedIndex].TenBan;
            frm.NVDatBan = HDTO.MaNV;
            frm.SoKhach = dsb[cboDSBanTrong.SelectedIndex].SoKhach;
            frm.TDTO = new TANGDTO();
            frm.TDTO = dst[cboDSTang.SelectedIndex];
            frm.BDTO = new BANDTO();
            frm.BDTO = dsb[cboDSBanTrong.SelectedIndex];
            frm.ShowDialog();
        }
        private void btnThanhToan_Click(object sender, EventArgs e)
        {
            HOADONBUS HBUS = new HOADONBUS();
            HOADONDTO HDTO = new HOADONDTO();
            HDTO = HBUS.LayThongTinHD(dsb[cboDSBanTrong.SelectedIndex]);
            if (HBUS.KiemTraHuy(dsb[cboDSBanTrong.SelectedIndex]))//Chưa gọi món
            {
                MessageBox.Show("Bàn này chưa gọi món!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            else//Đã gọi món
            {
                FormHoaDon frm = new FormHoaDon();
                frm.HDTO = new HOADONDTO();
                frm.HDTO.MaHD = HDTO.MaHD;
                frm.HDTO.ThoiGian = DateTime.Now;
                if (frm.ShowDialog() == DialogResult.OK)
                {
                    if (HBUS.ThanhToan(HDTO) < 1)
                        MessageBox.Show("Thanh toán không thành công.", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    else
                        txtSoKhach_TextChanged(sender, e);
                }
            }
        }
        //Sự kiện Gọi món
        private void txtSoLuong_TextChanged(object sender, EventArgs e)
        {
            if (lvl)
            {
                lvl = false;
                txtSoLuong.BackColor = Color.White;
            }
            bool check = true;

            string s = txtSoLuong.Text;
            if (s == "")
            {
                btnTang.Text = "Tặng";
                btnGoiMon.Text = "Gọi món";
                return;
            }
            int i;
            for (i = 0; i < s.Length; i++)
            {
                if (char.IsDigit(s[i]) == false)
                {
                    check = false;
                    break;
                };
            }

            if (check == false || Convert.ToInt32(txtSoLuong.Text) < 0)
            {
                btnTang.Text = "Tặng";
                btnGoiMon.Text = "Gọi món";
                lvl = true;
                txtSoLuong.Focus();
                txtSoLuong.SelectionStart = 0;
                txtSoLuong.SelectionLength = txtSoLuong.TextLength;
                txtSoLuong.BackColor = Color.Pink;
                return;
            }
            if (cboMon.SelectedIndex == -1) return;
            if (txtBan.Text == "")
            {
                btnTang.Text = "Tặng";
                btnGoiMon.Text = "Gọi món";
                return;
            }
            if (check && Convert.ToInt32(txtSoLuong.Text) == 0)
            {
                if (dsm[cboMon.SelectedIndex].KM != 0)
                {
                    btnTang.Text = "Hủy tặng";
                }
                else btnTang.Text = "Tặng";

                if (dsm[cboMon.SelectedIndex].SL != 0)
                {
                    btnGoiMon.Text = "Hủy món";
                }
                else btnGoiMon.Text = "Gọi món";
            }
            else//Khác 0 - Cập nhật/Thêm mới
            {
                if (dsm[cboMon.SelectedIndex].KM != 0)
                {
                    btnTang.Text = "Tặng lại";
                }
                else
                {
                    btnTang.Text = "Tặng";
                }
                if (dsm[cboMon.SelectedIndex].SL != 0)
                {
                    btnGoiMon.Text = "Gọi lại";
                }
                else
                {
                    btnGoiMon.Text = "Gọi món";
                }
            }
        }
        private void txtBan_TextChanged(object sender, EventArgs e)
        {
            txtSoLuong.Text = "";
            if (txtBan.Text == "")
            {
                btnDoiMon.Enabled = false;
                btnGoiMon.Enabled = false;
                btnTang.Enabled = false;
                cboLoaiMon.Enabled = false;
                cboLoaiMon.Text = "";
                cboLoaiMon.Items.Clear();
                cboMon.Enabled = false;
                cboMon.Items.Clear();
                cboMon.Text = "";
                cboNVGoiMon.Enabled = false;
                txtSoLuong.Enabled = false;
                txtDVT.Text = "";
                dtgDSMonGoi.Rows.Clear();
                btnTang.Text = "Tặng";
                btnGoiMon.Text = "Gọi món";
            }
            else
            {
                cboNVGoiMon.Enabled = true;
                btnDoiMon.Enabled = true;
                btnGoiMon.Enabled = true;
                btnTang.Enabled = true;
                cboMon.Enabled = true;
                cboLoaiMon.Enabled = true;
                txtSoLuong.Enabled = true;
                //Hiển thị danh sách món theo bàn
                LayDanhSachLoaiMon();
            }

        }
        private void cboLoaiMon_SelectedIndexChanged(object sender, EventArgs e)
        {
            LayDanhSachMon();
        }
        private void cboMon_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (lvl)
            {
                lvl = false;
                txtSoLuong.BackColor = Color.White;
            }
            LayDVT();
            dtgDSMonGoi.CurrentCell = dtgDSMonGoi[0, cboMon.SelectedIndex];
            dtgDSMonGoi_SelectionChanged(sender, e);
        }
        private void cboMon_DrawItem(object sender, DrawItemEventArgs e)
        {
            e.DrawBackground();
            if (e.Index == -1) return;
            if (dsm[e.Index].SL == 0 && dsm[e.Index].KM == 0)//Chưa gọi
            {
                e.Graphics.DrawString(cboMon.Items[e.Index].ToString(), cboMon.Font, System.Drawing.Brushes.Blue, new RectangleF(e.Bounds.X, e.Bounds.Y, e.Bounds.Width, e.Bounds.Height));
            }
            else 
                e.Graphics.DrawString(cboMon.Items[e.Index].ToString(), cboMon.Font, System.Drawing.Brushes.Red, new RectangleF(e.Bounds.X, e.Bounds.Y, e.Bounds.Width, e.Bounds.Height));
            e.DrawFocusRectangle();
        }
        private void cboLoaiMon_DrawItem(object sender, DrawItemEventArgs e)
        {
            e.DrawBackground();
            if (e.Index == -1) return;
            if (dsl[e.Index].TinhTrang)//Đã gọi
            {
                e.Graphics.DrawString(cboLoaiMon.Items[e.Index].ToString(), cboLoaiMon.Font, System.Drawing.Brushes.Red, new RectangleF(e.Bounds.X, e.Bounds.Y, e.Bounds.Width, e.Bounds.Height));
            }
            else
                e.Graphics.DrawString(cboLoaiMon.Items[e.Index].ToString(), cboLoaiMon.Font, System.Drawing.Brushes.Blue, new RectangleF(e.Bounds.X, e.Bounds.Y, e.Bounds.Width, e.Bounds.Height));
            e.DrawFocusRectangle();
        }
        private void btnTang_Click(object sender, EventArgs e)
        {
            if (cboMon.Items.Count > 0 && dsm[cboMon.SelectedIndex].KM == 0)//Chưa gọi
            {
                if (txtSoLuong.Text == "")
                {
                    lvl = true;
                    txtSoLuong.BackColor = Color.Pink;
                    txtSoLuong.Focus();
                    return;
                }
                string s = txtSoLuong.Text;
                bool check = true;
                int i;
                for (i = 0; i < s.Length; i++)
                {
                    if (char.IsDigit(s[i]) == false)
                    {
                        check = false;
                        break;
                    }
                }
                if (check)
                {
                    int x = Convert.ToInt32(txtSoLuong.Text);
                    if (x < 1) check = false;
                }
                if (check == false)
                {
                    MessageBox.Show("Số lượng không đúng.", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    txtSoLuong.Focus();
                    txtSoLuong.SelectionStart = 0;
                    txtSoLuong.SelectionLength = txtSoLuong.TextLength;
                    return;
                }

                //Tặng món mới
                HOADONBUS HBUS = new HOADONBUS();
                CHITIETHOADONDTO CDTO = new CHITIETHOADONDTO();
                CDTO.MaHD = HBUS.LayThongTinHD(dsb[cboDSBanTrong.SelectedIndex]).MaHD;
                THUCDONDTO TDTO = new THUCDONDTO();

                CDTO.MaMon = dsm[cboMon.SelectedIndex].MaMon;
                TDTO.MaMon = CDTO.MaMon;
                CDTO.KhuyenMai = Convert.ToInt32(txtSoLuong.Text);
                CDTO.MaNV = dsg[cboNVGoiMon.SelectedIndex].MaNV;
                CDTO.SoLuong = 0;
                CHITIETHOADONBUS CBUS = new CHITIETHOADONBUS();
                if (CBUS.GoiMon(CDTO) < 1)
                {
                    MessageBox.Show("Tặng món không thành công.", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                else
                {
                    cboDSBanTrong_SelectedIndexChanged(sender, e);
                    THUCDONBUS TBUS = new THUCDONBUS();
                    THUCDONDTO TDTO2 = new THUCDONDTO();
                    TDTO2 = TBUS.LayMaLoaiMon(TDTO);
                    cboLoaiMon.SelectedItem = TDTO2.TenLoai;
                    for (i = 0; i < dsm.Count; i++)
                    {
                        if (dsm[i].TenMon == TDTO2.TenMon && dsm[i].DVT == TDTO2.DVT)
                        {
                            cboMon.SelectedIndex = i;
                        }
                    }
                }
            }
            else//Gọi rồi - Hủy tặng/Cập nhật số lượng
            {
                if (txtSoLuong.Text == "")
                {
                    lvl = true;
                    txtSoLuong.BackColor = Color.Pink;
                    txtSoLuong.Focus();
                    return;
                }
                string s = txtSoLuong.Text;
                bool check = true;
                int i;
                for (i = 0; i < s.Length; i++)
                {
                    if (char.IsDigit(s[i]) == false)
                    {
                        check = false;
                        break;
                    }
                }
                int x=0;
                if (check)
                {
                    x = Convert.ToInt32(txtSoLuong.Text);
                    if (x < 0) check = false;
                }
                if (check == false)
                {
                    MessageBox.Show("Số lượng không đúng.", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    txtSoLuong.Focus();
                    txtSoLuong.SelectionStart = 0;
                    txtSoLuong.SelectionLength = txtSoLuong.TextLength;
                    return;
                }
                if (x == 0)//Hủy tặng
                {
                    HOADONBUS HBUS = new HOADONBUS();
                    CHITIETHOADONDTO CDTO = new CHITIETHOADONDTO();
                    HOADONDTO HDTO = new HOADONDTO();
                    //Lấy MaHD trong bảng HOADON
                    HDTO = HBUS.LayThongTinHD(dsb[cboDSBanTrong.SelectedIndex]);
                    //Lấy MaMon
                    THUCDONDTO TDTO = new THUCDONDTO();
                    TDTO.MaMon = dsm[cboMon.SelectedIndex].MaMon;
                    //Lấy MaNV trong bảng CHITIETHOADON
                    CHITIETHOADONBUS CBUS = new CHITIETHOADONBUS();
                    CDTO = CBUS.LayThongTinCTHD(HDTO, TDTO);
                    CDTO.MaNV = dsg[cboNVGoiMon.SelectedIndex].MaNV;
                    if (CBUS.HuyMon(CDTO, false) < 1)//Hủy tặng
                    {
                        MessageBox.Show("Hủy tặng món không thành công.", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                    else
                    {
                        cboDSBanTrong_SelectedIndexChanged(sender, e);
                        THUCDONBUS TBUS = new THUCDONBUS();
                        THUCDONDTO TDTO2 = new THUCDONDTO();
                        TDTO2 = TBUS.LayMaLoaiMon(TDTO);
                        cboLoaiMon.SelectedItem = (TDTO2.TenLoai);
                        for (i = 0; i < dsm.Count; i++)
                        {
                            if (dsm[i].TenMon == TDTO2.TenMon && dsm[i].DVT == TDTO2.DVT)
                            {
                                cboMon.SelectedIndex = i;
                            }
                        }
                    }
                }
                else//Cập nhật số lượng
                {
                    HOADONDTO HDTO = new HOADONDTO();
                    HOADONBUS HBUS = new HOADONBUS();
                    CHITIETHOADONDTO CDTOCu = new CHITIETHOADONDTO();
                    CHITIETHOADONDTO CDTOMoi = new CHITIETHOADONDTO();
                    CHITIETHOADONBUS CBUS = new CHITIETHOADONBUS();
                    CHITIETHOADONDTO CDTO = new CHITIETHOADONDTO();
                    HDTO = HBUS.LayThongTinHD(dsb[cboDSBanTrong.SelectedIndex]);//MaHD, MaNV
                    CDTO = CBUS.LayThongTinCTHD(HDTO, dsm[cboMon.SelectedIndex]);//MaHD, MaNV, MaMon
                    //DOIMON(@MaHD int, @MaNVCu int, @MaNVMoi int, @MaMonCu int, @MaMonMoi int, @SoLuong int)
                    CDTOCu.MaHD = HDTO.MaHD;
                    CDTOCu.MaNV = CDTO.MaNV;
                    CDTOCu.MaMon = dsm[cboMon.SelectedIndex].MaMon;
                    //Moi
                    CDTOMoi.MaMon = dsm[cboMon.SelectedIndex].MaMon;
                    int MaMon = dsm[cboMon.SelectedIndex].MaMon;
                    CDTOMoi.MaNV = dsg[cboNVGoiMon.SelectedIndex].MaNV;
                    CDTOMoi.SoLuong = dsm[cboMon.SelectedIndex].SL;
                    CDTOMoi.KhuyenMai = Convert.ToInt32(txtSoLuong.Text);
                    if (CBUS.CapNhatThongTin(CDTOCu, CDTOMoi) < 1)
                    {
                        MessageBox.Show("Cập nhật không thành công.", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        return;
                    }
                    cboLoaiMon_SelectedIndexChanged(sender, e);
                    for (i = 0; i < dsm.Count;i++ )
                    {
                       if(dsm[i].MaMon==MaMon)
                           cboMon.SelectedIndex = i;
                    }
                }
            }
        }
        private void dtgDSMonGoi_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            if (e.RowIndex < 0)
                return;
            cboMon.SelectedIndex = dtgDSMonGoi.CurrentCell.RowIndex;
        }
        private void dtgDSMonGoi_SelectionChanged(object sender, EventArgs e)
        {
            int sr = dtgDSMonGoi.CurrentCell.RowIndex;
            if (sr != -1 && dsm.Count > sr && (dsm[sr].SL != 0 || dsm[sr].KM != 0) && txtBan.Text!="")
            {
                btnDoiMon.Enabled = true;
                txtSoLuong_TextChanged(sender, e);
            }
            else if(txtBan.Text!="")
            {
                btnTang.Text = "Tặng";
                btnGoiMon.Text = "Gọi món";
                btnDoiMon.Enabled = false;
            }
        }
        private void btnGoiMon_Click(object sender, EventArgs e)
        {
            if(btnGoiMon.Text=="Gọi món")
            {
                if (txtSoLuong.Text == "")
                {
                    lvl = true;
                    txtSoLuong.BackColor = Color.Pink;
                    txtSoLuong.Focus();
                    return;
                }
                string s = txtSoLuong.Text;
                bool check = true;
                int i;
                for (i = 0; i < s.Length; i++)
                {
                    if (char.IsDigit(s[i]) == false)
                    {
                        check = false;
                        break;
                    };
                }
                if (check)
                {
                    int x = Convert.ToInt32(txtSoLuong.Text);
                    if (x < 1) check = false;
                }
                if (check == false)
                {
                    MessageBox.Show("Số lượng không đúng.", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    txtSoLuong.Focus();
                    txtSoLuong.SelectionStart = 0;
                    txtSoLuong.SelectionLength = txtSoLuong.TextLength;
                    return;
                }
                //GOIMON(@MaHD int, @MaMon int, @KhuyenMai bit, @MaNV int, @SoLuong int)
                HOADONBUS HBUS = new HOADONBUS();
                CHITIETHOADONDTO CDTO = new CHITIETHOADONDTO();
                CDTO.MaHD = HBUS.LayThongTinHD(dsb[cboDSBanTrong.SelectedIndex]).MaHD;
                CDTO.MaMon = dsm[cboMon.SelectedIndex].MaMon;
                CDTO.KhuyenMai = 0;
                CDTO.MaNV = dsg[cboNVGoiMon.SelectedIndex].MaNV;
                CDTO.SoLuong = Convert.ToInt32(txtSoLuong.Text);
                CHITIETHOADONBUS CBUS = new CHITIETHOADONBUS();
                if (CBUS.GoiMon(CDTO) < 1)
                {
                    MessageBox.Show("Gọi món không thành công.", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }
                else
                {
                    THUCDONDTO TDTO = new THUCDONDTO();
                    TDTO.MaMon = dsm[cboMon.SelectedIndex].MaMon;
                    THUCDONBUS TBUS = new THUCDONBUS();
                    THUCDONDTO TDTO2 = new THUCDONDTO();
                    TDTO2 = TBUS.LayMaLoaiMon(TDTO);
                    cboDSBanTrong_SelectedIndexChanged(sender, e);
                    cboLoaiMon.SelectedItem = (TDTO2.TenLoai);
                    for (i = 0; i < dsm.Count; i++)
                    {
                        if (dsm[i].TenMon == TDTO2.TenMon && dsm[i].DVT == TDTO2.DVT)
                        {
                            cboMon.SelectedIndex = i;
                        }
                    }
                }
            }
            else if (btnGoiMon.Text == "Hủy món")
            {
                if (MessageBox.Show("Bạn thực sự muốn hủy món này?", "Hủy món", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK)
                {
                    //HUYMON(@MaHD int, @MaMon int)
                    HOADONBUS HBUS = new HOADONBUS();
                    CHITIETHOADONDTO CDTO = new CHITIETHOADONDTO();
                    CDTO.MaHD = HBUS.LayThongTinHD(dsb[cboDSBanTrong.SelectedIndex]).MaHD;
                    CDTO.MaMon = dsm[cboMon.SelectedIndex].MaMon;
                    CHITIETHOADONBUS CBUS = new CHITIETHOADONBUS();
                    if (CBUS.HuyMon(CDTO, true) < 1)//Hủy gọi
                    {
                        MessageBox.Show("Hủy món không thành công.", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        return;
                    }
                    else
                    {
                        THUCDONDTO TDTO = new THUCDONDTO();
                        TDTO.MaMon = dsm[cboMon.SelectedIndex].MaMon;
                        THUCDONBUS TBUS = new THUCDONBUS();
                        THUCDONDTO TDTO2 = new THUCDONDTO();
                        TDTO2 = TBUS.LayMaLoaiMon(TDTO);
                        cboDSBanTrong_SelectedIndexChanged(sender, e);
                        cboLoaiMon.SelectedItem = (TDTO2.TenLoai);
                        for (int i = 0; i < dsm.Count; i++)
                        {
                            if (dsm[i].TenMon == TDTO2.TenMon && dsm[i].DVT == TDTO2.DVT)
                            {
                                cboMon.SelectedIndex = i;
                            }
                        }
                    }
                }
            }
            else//Cập nhật món gọi
            {
                HOADONDTO HDTO = new HOADONDTO();
                HOADONBUS HBUS = new HOADONBUS();
                CHITIETHOADONDTO CDTOCu = new CHITIETHOADONDTO();
                CHITIETHOADONDTO CDTOMoi = new CHITIETHOADONDTO();
                CHITIETHOADONBUS CBUS = new CHITIETHOADONBUS();
                CHITIETHOADONDTO CDTO = new CHITIETHOADONDTO();
                HDTO = HBUS.LayThongTinHD(dsb[cboDSBanTrong.SelectedIndex]);//MaHD, MaNV
                CDTO = CBUS.LayThongTinCTHD(HDTO, dsm[cboMon.SelectedIndex]);//MaHD, MaNV, MaMon
                //DOIMON(@MaHD int, @MaNVCu int, @MaNVMoi int, @MaMonCu int, @MaMonMoi int, @SoLuong int)
                CDTOCu.MaHD = HDTO.MaHD;
                CDTOCu.MaNV = CDTO.MaNV;
                CDTOCu.MaMon = dsm[cboMon.SelectedIndex].MaMon;
                //Moi
                CDTOMoi.MaMon = dsm[cboMon.SelectedIndex].MaMon;
                int MaMon = dsm[cboMon.SelectedIndex].MaMon;
                CDTOMoi.MaNV = dsg[cboNVGoiMon.SelectedIndex].MaNV;
                CDTOMoi.SoLuong = Convert.ToInt32(txtSoLuong.Text);
                CDTOMoi.KhuyenMai = dsm[cboMon.SelectedIndex].KM;
                if (CBUS.CapNhatThongTin(CDTOCu, CDTOMoi) < 1)
                {
                    MessageBox.Show("Cập nhật không thành công.", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }
                cboLoaiMon_SelectedIndexChanged(sender, e);
                for (int i = 0; i < dsm.Count; i++)
                {
                    if (dsm[i].MaMon == MaMon)
                        cboMon.SelectedIndex = i;
                }
            }
            
        }
        private void btnDoiMon_Click(object sender, EventArgs e)
        {
            HOADONBUS HBUS = new HOADONBUS();
            HOADONDTO HDTO = new HOADONDTO();
            HDTO = HBUS.LayThongTinHD(dsb[cboDSBanTrong.SelectedIndex]);//Lấy mã hóa đơn
            CHITIETHOADONBUS CBUS = new CHITIETHOADONBUS();
            CHITIETHOADONDTO CDTO = new CHITIETHOADONDTO();
            CDTO = CBUS.LayThongTinCTHD(HDTO, dsm[cboMon.SelectedIndex]);//Lấy Mã nhân viên gọi món
            FormDoiMonGoi frm = new FormDoiMonGoi();
            frm.CapNhat = new FormDoiMonGoi.GetString(CapNhat2);
            frm.NVDTO = NVDTO;
            frm.Loai = dsl[cboLoaiMon.SelectedIndex].TenLoai;
            frm.Mon = dsm[cboMon.SelectedIndex].TenMon;
            frm.NVGoiMon = CDTO.MaNV;
            frm.SoLuong = dsm[cboMon.SelectedIndex].SL;
            frm.KhuyenMai = dsm[cboMon.SelectedIndex].KM;
            frm.LDTO = new LOAIMONDTO();
            frm.LDTO = dsl[cboLoaiMon.SelectedIndex];
            frm.LDTO.Loai = rdMon.Checked;
            frm.MDTO = new THUCDONDTO();
            frm.MDTO = dsm[cboMon.SelectedIndex];
            frm.BDTO = dsb[cboDSBanTrong.SelectedIndex];
            frm.ShowDialog();
        }
        private void cboNVDatBan_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                btnDatBan_Click(sender,e);
            }
            else if (e.KeyCode == Keys.Escape)
            {
                this.Close();
            }
        }
        private void cboDSTang_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                btnDatBan_Click(sender, e);
            }
            else if (e.KeyCode == Keys.Escape)
            {
                this.Close();
            }
        }
        private void txtSoKhach_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                btnDatBan_Click(sender, e);
            }
            else if (e.KeyCode == Keys.Escape)
            {
                this.Close();
            }
        }
        private void cboDSBanTrong_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                btnDatBan_Click(sender, e);
            }
            else if (e.KeyCode == Keys.Escape)
            {
                this.Close();
            }
        }
        private void cboNVGoiMon_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                btnGoiMon_Click(sender, e);
            }
            else if (e.KeyCode == Keys.Escape)
            {
                this.Close();
            }
        }
        private void cboLoaiMon_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                btnGoiMon_Click(sender, e);
            }
            else if (e.KeyCode == Keys.Escape)
            {
                this.Close();
            }
        }
        private void cboMon_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                btnGoiMon_Click(sender, e);
            }
            else if (e.KeyCode == Keys.Escape)
            {
                this.Close();
            }
        }
        private void txtSoLuong_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                btnGoiMon_Click(sender, e);
            }
            else if (e.KeyCode == Keys.Escape)
            {
                this.Close();
            }
        }
        private void rdMon_CheckedChanged(object sender, EventArgs e)
        {
            if (rdMon.Checked)
            { 
                loai = false; 
            }
            else 
            { 
                loai = true; 
            }
            LayDanhSachLoaiMon();
            LayDanhSachMon();
        }
    }
 }